package edzest.basic;

public class J13_StaticMember {

	public static void main(String[] args) {
		// static 멤버 변수 다루기
		
		// 클래스의 객체를 생성해야
		// 클래스의 멤버변수를 사용할 수 있음
		// nonStaticVar 변수는
		// J13_NonStatic 에 대해
		// new 연산자로 객체를 생성한 다음에
		// 사용할 수 있음
		// 변수를 저장하기 위해서 객체생성
		// 내가 있고나서 나의 눈이 있듯이
		// 객체가 있어야 멤버변수를 사용
		J13_NonStatic nonStatic = new J13_NonStatic();
		nonStatic.nonStaticVar = "멤버변수";
		
		// 하지만, 클래스에 대한 객체 생성없이
		// 해당 멤버 변수를 사용하려면
		// static이라는 지시문을 사용
		// staticVar 변수는 static으로
		// 선언되었기 때문에 new 연산자 없이 
		// 바로 사용 가능
		// 내가 없어도 공기가 있듯이
		// static은 객체생성없이 멤버변수 사용
		J13_Static.staticVar = "정적변수";
		
		// static 으로 선언된 수학처리 클래스 사용
		// max(), min(), random(),
		// ceil(), floor(), round() // 이 3가지 많이 쓰임. 특히 ceil(), floor()
		double r = Math.random();
		System.out.println( r );
		System.out.println( r * 10 ); // 0부터 9까지 나옴
		System.out.println( (int)(r * 10) + 1 ); // 1 부터 10까지 나옴
	} // main

} // class

class J13_NonStatic {
	// 멤버 변수 선언
	public String nonStaticVar; 
	// 클래스하나에 변수하나 담는거는 낭비지만 열거형이란거는 그렇게 쓴다
}

class J13_Static {
	// 정적static 변수 선언
	public static String staticVar; // 순서는 이 방식 추천
	// static public String staticVar; 
	// 접근 수정자가 있다면 접근 수정자 앞/뒤에 쓰면 됨. 위치 상관 없음
}